Create classes representing states and cities. Each state has a name, an acronym, and cities. Each city has a name and population. Write a test program to create three states with a few cities. Display the population of each state as the sum of the population of its cities.
Answer:
##############################################################################
# Python From Scratch
# Author: Nilo Ney Coutinho Menezes
# Editora Novatec (c) 2010-2025 - LogiKraft 2025
# Site: https://pythonfromscratch.com
# ISBN: 978-85-7522-949-1 (Paperback), 978-85-7522-950-7 (hardcover), 978-85-7522-951-4 (ebook)
#
# File: chapter 10/exercise-10-11.py.py
##############################################################################
class State:
def __init__(self, name, acronym):
self.name = name
self.acronym = acronym
self.cities = []
def add_city(self, city):
city.state = self
self.cities.append(city)
def population(self):
return sum([c.population for c in self.cities])
class City:
def __init__(self, name, population):
self.name = name
self.population = population
self.state = None
def __str__(self):
return (
f"City (name={self.name}, population={self.population}, state={self.state})"
)
# Populations obtained from Wikipedia
# IBGE 2012 estimate
am = State("Amazonas", "AM")
am.add_city(City("Manaus", 1861838))
am.add_city(City("Parintins", 103828))
am.add_city(City("Itacoatiara", 89064))
sp = State("São Paulo", "SP")
sp.add_city(City("São Paulo", 11376685))
sp.add_city(City("Guarulhos", 1244518))
sp.add_city(City("Campinas", 1098630))
rj = State("Rio de Janeiro", "RJ")
rj.add_city(City("Rio de Janeiro", 6390290))
rj.add_city(City("São Gonçalo", 1016128))
rj.add_city(City("Duque de Caixias", 867067))
for state in [am, sp, rj]:
print(f"State: {state.name} Acronym: {state.acronym}")
for city in state.cities:
print(f"City: {city.name} Population: {city.population}")
print(f"State Population: {state.population()}\n")